package com.butterfly.encrypt.util;

import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 字符串工具类
 * @author fox email:hitman__47@163.com
 * @version 1.0 2013-10-21 18:17
 *
 */
public class StringUtil {
//	private static final  Logger log = Logger.getLogger(StringUtil.class);
	
	/**
	 * 去掉字符串左边的空格
	 * @param str
	 * @return
	 * @throws Exception 
	 */
	public static String trimLeft(String str) {
		if(str==null)
			return null;
//		else if(str.indexOf(str.trim())==-1)
//				log.error(String.format("调用StrngUtil类trimLeft方法的字符串[%s]错误信息[%s]", str,"不是有效字符串"));
//				throw new Exception("字符串有误");
		return str.substring(str.indexOf(str.trim()));
		
	}
	/**
	 * 去掉字符串右边的空格
	 * @param str
	 * @return
	 * @throws Exception 
	 */
	public static String  trimRight(String str) {
		if(str==null)
			return null;
//		else if(str.lastIndexOf(str.trim())==-1)
//			throw new Exception("字符串有误");
//		else 
		return str.substring(0,str.lastIndexOf(str.trim())+str.trim().length());
	}
	/**
	 * 去掉字符串中包含的所有空格
	 * @param str
	 * @return
	 */
	public static String trimAll(String str){
			if(str==null)
				return null;
		return str.replaceAll(" ", "");
	}
	/**
	 * 去掉字符串中头尾的空格
	 * @param str
	 * @return
	 */
	public static String trim(String str){
		if(str==null)
			return null;
		return str.trim();
	}
	/**
	 * 去掉字符串中间的空格
	 * @param str
	 * @return
	 */
	public static String trimCenter(String str){
		if(str==null)
			return null;
		StringBuffer sb=new StringBuffer();
		int left=str.indexOf(str.trim());
		int right=str.length()-(str.lastIndexOf(str.trim())+str.trim().length());
		for(int i=0;i<left;i++)
			sb.append(" ");
		sb.append(str.replaceAll(" ", ""));
		for(int j=0;j<right;j++)
			sb.append(" ");
		return sb.toString();
	}
	/**
	 * 判断字符串是否为空
	 * @param str
	 * @return
	 */
	public static boolean isEmpty(String str){
		if(str==null)
			return true;
		else 
			return "".equals(str.trim());
	}
	/**
	 * 生成随机数
	 * 
	 *   方法说明： 
	 *       该函数获得随机数字符串 ，字母大写
	 *       @param       iLen   int   :需要获得随机数的长度 
	 *       @param       iType  int:随机数的类型： '0 ':表示仅获得数字随机数； '1 '：表示仅获得字符随机数； '2 '：表示获得数字字符混合随机数 
	 *       @since   1.0.0 
	 */ 
	public static String createRadom(int iLen,int iType) {
		StringBuffer strRandom=new StringBuffer();
		Random   rnd   =   new   Random(); 
		switch   (iType) {
          	case   0 : 
          		for   (int   iLoop=0;iLoop <iLen;iLoop++) { 
          			strRandom.append(Integer.toString(rnd.nextInt(10)));
          		} 
          		break; 
          	case   1 : 
          		for   (int   iLoop=0;iLoop <iLen;iLoop++) {
          			strRandom.append(Integer.toString((35-rnd.nextInt(10)),36));
          		} 
          		break;
          	case   2: 
          		for   (int   iLoop=0;iLoop <iLen;iLoop++) {
          			strRandom.append(Integer.toString(rnd.nextInt(36),36));
          		}
          		break;
		}
		return   strRandom.toString().toUpperCase(); 
	}
	  /**
	   * 校验字符串是否为数字
	   * @param code 		要校验的字符串
	   * @return boolean    校验结果
	   */
	  public static boolean isDigital(String str){
		  if(str!=null&&str.trim().matches("[0-9]+")){
			  return true;
		  }else{
			  return false;
		  }
	  }
	 /**
	  * 功能：判断字符串是否为日期格式 yyyyMMdd
	  * @param strDate
	  * @return boolean 字符串是否为日期
	  */
	public static boolean isDate(String strDate) {
		Pattern pattern = Pattern
				.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$");
		Matcher m = pattern.matcher(strDate);
		if (m.matches()) {
			return true;
		} else {
			return false;
		}
	}

	public static void main(String[] args) {
		 String  str="  m m  c    ";
//		 System.out.println(trimRight(str).length());
//		 System.out.println(trimRight(str));
//		 System.out.println("---"+str.lastIndexOf(str.trim()));
//		 System.out.println(trimAll(str));
		 
		 System.out.println(trimCenter(str));
		 System.out.println(trimCenter(str).length());
		 
		 
		 
	}
}
